<?php

namespace controller;

require_once ('src/View/ApplicationView.php');
require_once ('src/View/LoginView.php');
require_once ('src/View/CookieView.php');

// Här skapar vi vår Controller class
class LoginController {
	
	/**
	 * @param \model\LoginModel $loginModel
	 * @var array $logoutData
	 * @var array $userHasInput
	 * @var array $userHasCookie 
	 * @var array $userData
	 * @return String Html 	
	 */
	
	// Skapar en publik metod som tar in 1 paramter 
	public function checkLogin(\model\LoginModel $loginModel){
		 // skapar nya objekt utifrån våra classer
		 $applicationView = new \view\ApplicationView();
		 $loginView = new \view\LoginView();
		 $cookieView = new \view\CookieView();
		
		 
			// om hasLogedout funktionen retunerar true körs if sattsen,jag vill kontrollera om användaren har loggat ut.
		if ($loginView->hasLogedout($cookieView, $loginModel)) {
			
			/**
			 * om hasBeenLogedin funktionen retunerar true då körs if satsen.
			 * den går till hasBeenLogedin funktionen i view kollar i sessions kakan
			 */  			
			if ($loginModel->hasBeenLogedin()) {
				
				// om användaren har varit inloggad retuneras true då körs detta, användaren får en du är utloggad vy 
				$logoutData = array("9", "", "", "0", "0");
			} else {
					/**
					 * körs om hasBeenLogedin funktionen retunerar fales
					 * om användaren har blivit utloggad och
					 * laddar om sidan då får man en vanlig inloggnings vy.
					 */				
					$logoutData = array("8", "", "", "0", "0");
			}
							
			//setState funktionen anropas i modellen och $logoutData skickas med om användaren har loggat ut.	
			$loginModel->setState($logoutData);   // <--denna körs alltid om hasLogedout funktionen retunerar true
			//annars testas nästa else if 
		} else if($cookieView->hasTamperedCookies()){			
			
			$logoutData = array("0", "", "", "0", "0");
			
			$loginModel->setState($logoutData); // här skickar vi med $logoutData till setstate funktionen i loginModel
			
		} else {
							
				if ($cookieView->hasCookies($loginModel)) {						
					/**
					 * I vårt model-objekt sätts vissa värden
					 * som den får från view getCookies funktion.
					 * sen läggs retur värdet i $userHasCookie, 
					 * som är sessions kakor eller vanliga kakor 
					 * som kommer från getCookies funktionen
					 */											
					$userHasCookie = $cookieView->getCookies($loginModel);
					/**
					 * nu är $userHasCookie fylld med en 
					 * array och innehåll från getCookies funktionen,
					 * kakor. och nu anropar vi setState 
					 * och skickar med $userHasCookie. 
					 */  								
					$loginModel->setState($userHasCookie);
				/**
				 * Om Vyn View har registrerat fått nån input från användadaren in i metoden hasInput 
				 * ska följande if sats köras annars inte.
				 * hasInput funktion/metoden i View Classen
				 */	
				} else if ($loginView->hasInput()){	
					/**
					 * I vårt $model-objekt sätts vissa värden som den får från Vyns GetInput.
					 * Ex användaren är Inloggad
					 * hämtar från vyn skickar till modelen i setState funktionen
					 */
										
					/**
					 * Anropar getInput funktionen och hämtar ut dess värde som är en 
					 * array ($loginStatus, $username, $password, $stayLoggedin)
					 * denna array inehåll lägger vi i $userHasInput, 
					 */
						$userHasInput = $loginView->getInput();								
					/**
					 * sen så anropar vi setState funktionen i model, och skickar med
					 * $userHasInput array och dess innehål
					 */					
						$loginModel->setState($userHasInput);
					}
					/**
					 * om hasCookie funktionen retunerar true
					 * då kör vi innehålet i if sattsen. 
					 * Alltså om användaren har kakor då skall if satsen köras
					 */			
			}	
			
		/**
		 * detta körs alltid.-> jag fyller min $userData arrayen
		 * med det jag hämtar ut ifrån getData funktionen från modelen.
		 */ 
			$userData = $loginModel->getData();
			
		//här görs en kontroll om användaren har blivit inloggad,Är man inloggad körs if satsen.
		if ($userData[0] == "1"){
			$cookieView->setCookies($userData);		// skicka $userData till setCookies funktionen
		
		} else if ($userData[0] == "0" || $userData[4] == "1" || $userData[0] == "7"){
			
			$cookieView->resetCookies($loginModel);	 // här nollar man alla sina koakor om nått av utrycken i else if satsen stämmer 	
		   } 
		
		/**
		 * controllen anropar doOutput funktionen i ApplicationView
		 * och skickar med innehållet i $userData,och 2 object 
		 * sen får controllen tillbaka från view $output
		 * variablen och fylls i $returnOutput
		 * som i sin tur retunerar till index.php $html variablen.  
		 */
		$returnOutput = $applicationView->doOutput($userData, $loginModel, $loginView);
		return $returnOutput;

 	}	
	
}
